#include "cola.h"
#include <stdio.h>
#include <stdlib.h>

void print_test(char* name, bool result){
	printf("%s: %s\n", name, result? "OK" : "ERROR");
}

void prueba_cola()
{
    /* Declaro las variables a utilizar */
    cola_t *micola;
    int valor1=5, valor2=10, valor3=15;
    int *valor4, *valor5, *valor6;
    valor4=malloc(sizeof(int));
    *valor4=20;
    valor5=malloc(sizeof(int));
    *valor5=25;
    valor6=malloc(sizeof(int));
    *valor6=30;
    
   
  
    micola = cola_crear();
    //Pruebo que se cree vacia y que no pueda desapilar ni ver el tope debido a que esta vacia.
    print_test("Prueba cola: Crear cola vacia: ", micola != NULL);
    print_test("Prueba cola: error al ver tope de cola vacia: ", cola_ver_primero(micola) == NULL);
    print_test("Prueba cola: error al desapilar cola vacia: ", cola_desencolar(micola) == NULL);
    print_test("Prueba cola: Verifico pila cola: ", cola_esta_vacia(micola));
   // Encolo y desencolo un unico elemento comprobando si esta o no vacia segun corresponda y desapile el elemento indicado
    print_test("Prueba cola: Cargar cola unitaria: ", cola_encolar(micola, &valor1));
    print_test("Prueba cola: Verifico cola no vacia: ", ! cola_esta_vacia(micola));
	print_test("Prueba cola: Ver tope cola unitaria: ", cola_ver_primero(micola) == &valor1);
	print_test("Prueba cola: Desapilar cola unitaria: ", cola_desencolar(micola) == &valor1);
	print_test("Prueba cola: Verifico cola vacia: ", cola_esta_vacia(micola));
	// Encolo 3 elementos y verifico que se desencolen en el orden en que fueron encolados
	print_test("Prueba cola: Cargar cola : ", cola_encolar(micola, &valor1));
	print_test("Prueba cola: Cargar cola : ", cola_encolar(micola, &valor2));
	print_test("Prueba cola: Cargar cola : ", cola_encolar(micola, &valor3));
	print_test("Prueba cola: Desencolo : ", cola_desencolar(micola) == &valor1);
	print_test("Prueba cola: Desencolo : ", cola_desencolar(micola) == &valor2);
	print_test("Prueba cola: Desencolo : ", cola_desencolar(micola) == &valor3);
	//Compruebo que quede vacia la cola
	print_test("Prueba cola: Verifico cola vacia: ", cola_esta_vacia(micola));
	
	// Encolo 3 elementos y luego destruyo al cola, al ser *int paso la funcion free para liberar memoria.
	print_test("Prueba cola: Cargar cola : ", cola_encolar(micola, valor4));
	print_test("Prueba cola: Cargar cola : ", cola_encolar(micola, valor5));
	print_test("Prueba cola: Cargar cola : ", cola_encolar(micola, valor6));
	// Libero la memoria
	cola_destruir(micola , free);
	
	
	
}


int main(void){
	prueba_cola();
	return 0;
	
}
